<?php


/*if (!function_exists('mime_content_type')) {
	function mime_content_type($filename) {
		$finfo = finfo_open(FILEINFO_MIME_TYPE);
		$mimetype = finfo_file($finfo, $filename);
		finfo_close($finfo);
		return $mimetype;
	}
}*/


function removeDirRec($dir){
    if ($objs = glob($dir."/*")) {
        foreach($objs as $obj) {
            is_dir($obj) ? removeDirRec($obj) : unlink($obj);
        }
    }
    if (is_dir($dir))
    	rmdir($dir);
}

/**
 * Возвращает безопасную для сохранения в БД строку (в том числе преобразовывает и теги)
 *
 * @param string $toBeEscaped - строка, которую следует сделать безопасной
 * @return string - безопасная строка
 */
function absolutelyEscapeString($toBeEscaped){
  $toBeEscaped = trim($toBeEscaped);
  if (!get_magic_quotes_gpc() && !get_magic_quotes_runtime()){
  	$toBeEscaped = mysql_escape_string(htmlspecialchars($toBeEscaped));
  	$toBeEscaped = stripslashes(str_replace(array('"', "'"), array('&quot;', "&#039;"), $toBeEscaped));
    return $toBeEscaped;
  }
  else{
  	$toBeEscaped = htmlspecialchars($toBeEscaped);
  	$toBeEscaped = stripslashes(str_replace(array('"', "'"), array('&quot;', "&#039;"), $toBeEscaped));
    return $toBeEscaped;
  }
}

/**
 * Возвращает безопасную для сохранения в БД строку (без преобразования тегов)
 *
 * @param string $toBeEscaped - строка, которую следует сделать безопасной
 * @return string - безопасная строка
 */
function absolutelyEscapeStringSavingHtml($toBeEscaped){
  if (!get_magic_quotes_gpc() && !get_magic_quotes_runtime())
    return mysql_escape_string($toBeEscaped);
  else
    return $toBeEscaped;//addslashes($toBeEscaped);
}

/**
 * Возвращает безопасную для сохранения в БД строку (с учетом обработки WYSYWYG редактором)
 *
 * @param string $toBeEscaped - строка, которую следует сделать безопасной
 * @return string - безопасная строка
 */
function absolutelyEscapeStringFromWysiwyg($toBeEscaped, $type = "admin"){
    return absolutelyEscapeStringSavingHtml( Service_Editor::parseHTML($toBeEscaped, $type) );
}

/**
 * Возвращает безопасную для сохранения в БД строку (без преобразования тегов)
 *
 * @param string $toBeEscaped - строка, которую следует сделать безопасной
 * @return string - безопасная строка
 */
function unescapeString($toBeUnescaped){
  if (!get_magic_quotes_gpc() && !get_magic_quotes_runtime())
    return stripslashes($toBeEscaped);
  else
    return stripslashes($toBeUnescaped);
}


/**
 * Обрабочтчик непойманных исключений
 * Выводит информацию о необработанных исключениях
 *
 * @param Exception $exception - необработанное исключение
 */
function exceptionHandler(Exception $exception){
  echo '<div class="programmError">';
  echo '<strong>Не пойманное исключение</strong><br />';
    echo 'Сообщение: ' . $exception->getMessage() . '<br />';
    echo 'Файл: <strong>' . $exception->getFile() . '</strong>, строка <strong>' . $exception->getLine() . '</strong><br />';
    $arrExceptionTrace = $exception->getTrace();
    if(sizeof($arrExceptionTrace)){
      echo 'Цепочка:<br />';
      for ($i = 0; $i < sizeof($arrExceptionTrace); $i++) {
        echo '&nbsp;&nbsp;&nbsp;&nbsp;<strong>' . $arrExceptionTrace[$i]['file'] . '</strong>, строка <strong>' . $arrExceptionTrace[$i]['line'] . '</strong>, функция <strong>' . $arrExceptionTrace[$i]['function'] . '</strong>(';
        for ($j = 0; $j < sizeof($arrExceptionTrace[$i]['args']); $j++) {
        	if($j != 0)
        	  echo ', ';
        	echo $arrExceptionTrace[$i]['args'][$j];
        }
        echo ')<br />';
      }
    }
  echo '</div><br />';
}

function exceptionHandler2(Exception $exception){
}

/**
 * Обработчик ошибок, предупреждений и пр.
 * Выводит информацию о всевозможных ошибках
 *
 * @param integer $errType
 * @param string $errMsg
 * @param string $errFile
 * @param integer $errLine
 * @param array $errContext
 */
function errorHandler($errType, $errMsg, $errFile, $errLine, $errContext) {
  switch ($errType) {
    //E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING - эти ошибки нельзя обработать
    case E_WARNING: case E_NOTICE: case E_CORE_WARNING: case E_USER_ERROR: case E_USER_WARNING: case E_USER_NOTICE: //Выводим все важные предупреждения в браузер, в лог-файл
    echo '<div class="programmError">';
  	  echo '<strong>' . getExcteptionTypeName($errType) . '</strong><br />';
    echo 'Сообщение: ' . $errMsg . '<br />';
    echo 'Файл: <strong>' . $errFile . '</strong>, строка <strong>' . $errLine . '</strong><br />';
	  echo '</div><br />';
	  case (E_NOTICE | E_USER_NOTICE):
    default: //Выводим определенные и оставшиеся ошибки в лог-файл
    	$logMsg = date("Y-m-d H:i:s") . ' Ошибка ' . $errType . ' в файле ' . $errFile . ' (' . $errLine . '): ' . $errMsg . "\n";
	    $logErrType = 3;
      error_log($logMsg, $logErrType, LOG);
	}
}

function errorHandler2($errType, $errMsg, $errFile, $errLine, $errContext){
	$logMsg = date("Y-m-d H:i:s") . ' Ошибка ' . $errType . ' в файле ' . $errFile . ' (' . $errLine . '): ' . $errMsg . "\n";
	$logErrType = 3;
	error_log($logMsg, $logErrType, LOG);
}

/**
 * Выдает текстовое представление типа ошибки по его числовому эквиваленту
 *
 * @param integer $errType - числовой тип ошибки
 * @return string - строковый тип ошибки
 */
function getExcteptionTypeName($errType){
  switch ($errType){
    case 1: return 'FATAL ERROR';
    case 2: return 'WARNING';
    case 4: return 'PARSE';
    case 8: return 'NOTICE';
    case 16: return 'CORE_ERROR';
    case 32: return 'CORE_WARNING';
    case 64: return 'COMPILE_ERROR';
    case 128: return 'COMPILE_WARNING';
    case 256: return 'USER_ERROR';
    case 512: return 'USER_WARNING';
    case 1024: return 'USER_NOTICE';
    case 2048: return 'STRICT';
  }
}

/**
 * Из двух массивов формируем новый, содержащий элементы первого массива, которых нет во втором массиве
 *
 * @param array $arr1
 * @param array $arr2
 * @return array
 */
function arrayFullDifference($arr1, $arr2, $strictLowerCase = false) {
  if (empty($arr2))
    return $arr1;
  $arrNotExists = array();
  foreach ($arr1 as $arr1Element) {
    $isArr1ElemInArr2 = false;
    if ($strictLowerCase) {
      if (!in_iarray($arr1Element, $arr2))
        $arrNotExists[] = $arr1Element;
    }
    else {
      if (!in_array($arr1Element, $arr2))
        $arrNotExists[] = $arr1Element;
    }
  }
  return $arrNotExists;
}

function in_iarray($val, $arr) {
  $arrSize = sizeof($arr);
  for ($i = 0; $i < $arrSize; $i++)
    if (strtolowerU($val) == strtolowerU($arr[$i]))
      return true;
  return false;
}

function array_iunique($arr){
  $n = array();
  $arrSize = sizeof($arr);
  for ($i = 0; $i < $arrSize; $i++)
    if (!in_iarray($arr[$i], $n))
      $n[] = $arr[$i];
  return $n;
}

/* Converts a string to lowercase */
function strtolowerU($s) {
  return mb_strtolower($s, "utf-8");
}

/* Converts a string to lowercase */
function strtoupperU($s) {
  return mb_strtoupper($s, "utf-8");
}

/**
 * Из двух ассоциативных массивов формируем новый, содержащий элементы первого массива, которых нет во втором массиве
 *
 * @param array $arr1
 * @param array $arr2
 * @param string $strField1 - поле первого ассоциативного массива, по которому производится сравнение
 * @param string $strField2 - поле второго ассоциативного массива, по которому производится сравнение
 * @return array
 */
function getDataArraysFullDiff($arr1, $arr2, $strField1, $strField2) {
  $arrNotExists = array();
  foreach ($arr1 as $arr1Element) {
    $isArr1ElemInArr2 = false;
    foreach ($arr2 as $arr2Element) {
      if ($arr1Element[$strField1] == $arr2Element[$strField2]) {
        $isArr1ElemInArr2 = true;
        break;
      }
    }
    if (!$isArr1ElemInArr2)
      $arrNotExists[] = $arr1Element;
  }
  return $arrNotExists;
}
/**
 * Возвращаем колонку из двумерного ассоциативного массива
 *
 * @param array $arrSrc
 * @param string/int $key
 * @return array
 */
function getArrayColumn($arrSrc, $key) {
  $arrColumn = array();
  if (empty($arrSrc))
    return $arrColumn;
  foreach ($arrSrc as $arrElement)
    $arrColumn[] = $arrElement[$key];
  return $arrColumn;
}

/**
 * Метод ищет вхождение в ассоциативном массиве, аналогично in_array()
 *
 * @param string|int $needle - что ищем
 * @param string $field - в каком поле массива
 * @param array $arrIn - ассоциативный массив
 */
function inAssocArray($needle, $field, $arrIn){
	$arrIn = Service_ArrayConverter::getColumn($arrIn, $field);
	return array_search($needle, $arrIn) === false ? false : true;
}

/**
 *
 *
 * @param unknown_type $arrSrc - входной массив
 * @param unknown_type $strField - основное поле
 * @param unknown_type $arrFields - поля простого массива, из которых нужно сделать массив и вставить в поле $strFieldForArray основного массива
 * @param unknown_type $strFieldForArray - поле, куда вставися массив, состоящий из полей $arrFields
 * @return array - результат
 */
function arrayConvert($arrSrc, $strField, $arrFields, $strFieldForArray){
	if (is_string($arrFields))
		$arrFields[0] = $arrFields;
	$arrSize = sizeof($arrSrc);
	$arrSrcSubArray = array();
	$idCurStrField = 0;
	for ($i = 0; $i < $arrSize; $i++){
		$idCurStrField = $arrSrc[$i][$strField];
		if (!empty($arrSrc[$i][$arrFields[0]])){
			$k = 0;
			foreach ($arrFields as $curField){
				$arrSrcSubArray[$i][$k][$curField] = $arrSrc[$i][$curField];
				unset($arrSrc[$i][$curField]); // удаляем элементы, скопированные в подмассив
			}
			$k++;
			for ($j = $i+1; $j < $arrSize; $j++){
				if (isset($arrSrc[$j][$strField]) && $idCurStrField == $arrSrc[$j][$strField]){
					if (!empty($arrSrc[$j][$arrFields[0]])){
						foreach ($arrFields as $curField){
							$arrSrcSubArray[$i][$k][$curField] = $arrSrc[$j][$curField];
						}
						$k++;
					}
				}
			}
			$arrSrc[$i][$strFieldForArray] = $arrSrcSubArray[$i]; //
		}
	}

	$idCurStrField = 0; // повторяющиеся элементы обнуляем
	for ($i = 0; $i < $arrSize; $i++){
		$idCurStrField = $arrSrc[$i][$strField];
		for ($j = $i+1; $j < $arrSize; $j++){
			if (isset($arrSrc[$j][$strField]) && $idCurStrField == $arrSrc[$j][$strField]){
				$arrSrc[$j] = NULL;
			}
		}
	}

	$arrSrcNew = array(); // убираем пустые элементы
	for ($i = 0; $i < $arrSize; $i++){
		if ($arrSrc[$i] != NULL){
			$arrSrcNew[] = $arrSrc[$i];
		}
	}
	return $arrSrcNew;
}

/**
 * Возвращает значение, закглючённое между тегами <$tag></$tag>, берётся первый тег из всей строки
 *
 * @param string $str
 * @param string $tag
 * @return string
 */
function getTagBetweenValueFirst($str, $tag) {
  $start = strpos($str, $tag);
  $finish = findEndOfTag($str, $tag, $start);
  $str = substr($str, $start - 1, ($finish - $start) + 2);
  $str = substr($str, strpos($str, ">") + 1);
  return substr($str, 0, strlen($str) - strlen('</' . $tag . '>'));
}

/**
 *
 *
 * @param string $htmlString
 * @param string $tagName
 * @param integer $startPosition
 */
function findEndOfTag($htmlString, $tagName, $startPosition, $k = 1) {
	$tagNameLength = strlen($tagName);
	$closePosition = $openPosition = $startPosition;
	for (; $k > 0; $k--) {
		$closePosition = strpos( $htmlString, '</' . $tagName, $closePosition);
		if($closePosition === false)
		  return false;
		$closePosition = strpos( $htmlString, '>', $closePosition);
	}
	while (true) {
		$openPosition = strpos( $htmlString, '<' . $tagName, $openPosition);
		if($openPosition === false)
		  break;
		$openPosition = strpos( $htmlString, '>', $openPosition);
		if($openPosition < $closePosition)
		  $k++;
		else
		  break;
	  if($k == 100)
	    break;
	}
	if($k == 0)
	  return $closePosition;
	else
	  return findEndOfTag($htmlString, $tagName, $closePosition + 1, $k);
}
 /**
 * Функция из массива, например, айдишников, делает строку айдишников через запятую, т.е. 1, 2 , 3, 4
 *
 * @param string $toBeEscaped - строка, которую следует сделать безопасной
 * @return string - безопасная строка
 */
function intEscapeJoin(string $glue, array $arrToBeEscaped) {
 $sizeOfArr = sizeof($arrToBeEscaped);
 if(!$sizeOfArr) return '';
 $retStr= '';
 for ($i=0; $i < $sizeOfArr; $i++) {
  if($i)
    $retStr .= $glue . intval($arrToBeEscaped[$i]);
  else
    $retStr .= intval($arrToBeEscaped[$i]);
 }
 return $retStr;
}

/*Метод получает текущий url*/
function getCurrentUrl() {
	global $QUERY_STRING;
	global $PHP_SELF;
	if ($QUERY_STRING != '')
	  return $PHP_SELF  . '?' . $QUERY_STRING;
	else
		return $PHP_SELF;
}
/*Метод получает текущий малый url*/
function getCurrentSmallUrl() {
	return $_SERVER['PHP_SELF'];
}

//находит ближайший к указанному значению элемент в массиве
function array_find_closest($value, $array) {
  $size = count($array);
  if ($size > 0) {
    //absolute difference between 0th element and input value
    $diff = abs($array[0] - $value);
    //element closest to input value
    $ret = $array[0];
    //loop through the rest of the array
    for ($i = 1; $i < $size; $i++) {
      $temp = abs($array[$i] - $value);
      if ($temp < $diff) {
        //set new difference and closest element
        $diff = $temp;
        $ret = $array[$i];
      }
    }
    return $ret;
  } else
  return NULL;
}

/**
 * Получаем IP
 *
 * @return IP
 */
function GetIP() {
  if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP");
  else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR");
  else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR");
  else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR'];
  else $ip = "unknown";
  return $ip;
} // GetIP

// из файла /www/config.php

function translite($string) {
$string     = ereg_replace("ё", "yo", $string);
$string     = ereg_replace("й", "iy", $string);
$string     = ereg_replace("ю", "yu", $string);
$string     = ereg_replace("ь", "'",  $string);
$string     = ereg_replace("ч", "ch", $string);
$string     = ereg_replace("щ", "sh", $string);
$string     = ereg_replace("ц", "c",  $string);
$string     = ereg_replace("у", "u",  $string);
$string     = ereg_replace("к", "k",  $string);
$string     = ereg_replace("е", "e",  $string);
$string     = ereg_replace("н", "n",  $string);
$string     = ereg_replace("г", "g",  $string);
$string     = ereg_replace("ш", "sh", $string);
$string     = ereg_replace("з", "z",  $string);
$string     = ereg_replace("х", "h",  $string);
$string     = ereg_replace("ъ", "'",  $string);
$string     = ereg_replace("ф", "f",  $string);
$string     = ereg_replace("ы", "y",  $string);
$string     = ereg_replace("в", "v",  $string);
$string     = ereg_replace("а", "a",  $string);
$string     = ereg_replace("п", "p",  $string);
$string     = ereg_replace("р", "r",  $string);
$string     = ereg_replace("о", "o",  $string);
$string     = ereg_replace("л", "l",  $string);
$string     = ereg_replace("д", "d",  $string);
$string     = ereg_replace("ж", "j",  $string);
$string     = ereg_replace("э", "е",  $string);
$string     = ereg_replace("я", "ya", $string);
$string     = ereg_replace("с", "s",  $string);
$string     = ereg_replace("м", "m",  $string);
$string     = ereg_replace("и", "i",  $string);
$string     = ereg_replace("т", "t",  $string);
$string     = ereg_replace("б", "b",  $string);
$string     = ereg_replace("Ё", "Yo", $string);
$string     = ereg_replace("Й", "Iy", $string);
$string     = ereg_replace("Ю", "Yu", $string);
$string     = ereg_replace("Ч", "CH", $string);
$string     = ereg_replace("Ь", "'",  $string);
$string     = ereg_replace("Щ", "SH", $string);
$string     = ereg_replace("Ц", "C",  $string);
$string     = ereg_replace("У", "U",  $string);
$string     = ereg_replace("К", "K",  $string);
$string     = ereg_replace("Е", "E",  $string);
$string     = ereg_replace("Н", "N",  $string);
$string     = ereg_replace("Г", "G",  $string);
$string     = ereg_replace("Ш", "SH", $string);
$string     = ereg_replace("З", "Z",  $string);
$string     = ereg_replace("Х", "H",  $string);
$string     = ereg_replace("Ъ", "'",  $string);
$string     = ereg_replace("Ф", "F",  $string);
$string     = ereg_replace("Ы", "Y",  $string);
$string     = ereg_replace("В", "V",  $string);
$string     = ereg_replace("А", "A",  $string);
$string     = ereg_replace("П", "P",  $string);
$string     = ereg_replace("Р", "R",  $string);
$string     = ereg_replace("О", "O",  $string);
$string     = ereg_replace("Л", "L",  $string);
$string     = ereg_replace("Д", "D",  $string);
$string     = ereg_replace("Ж", "J",  $string);
$string     = ereg_replace("Э", "E",  $string);
$string     = ereg_replace("Я", "YA", $string);
$string     = ereg_replace("С", "S",  $string);
$string     = ereg_replace("М", "M",  $string);
$string     = ereg_replace("И", "I",  $string);
$string     = ereg_replace("Т", "T",  $string);
$string     = ereg_replace("Б", "B",  $string);
/***
функция ereg_replace находит значения в строке и заменяет их новой. здесь мы повторили весь алфавит, как видите  ::):
***/
    if(!empty($string)) {
        return $string;
    } // если строка не пуста, возвращаем строку
    else die("String empty/Строка пуста"); // а если пуста, орем во всю глотку xD
}

$my_groups = array("member" => "Пользователь", "admin" => "Администратор", "redactor" => "Редактор", "manager" => "Менеджер", "expert" => "Эксперт", "seo" => "SEO", "miss" => "Участник", "moder" => "Модератор", "guest" => "Гость");
$my_content = array(1 => "Новости", 2 => "Статьи");
$my_mons = array("01" => "января", "02" => "февраля", "03" => "марта", "04" => "апреля", "05" => "мая", "06" => "июня", "07" => "июля", "08" => "августа", "09" => "сентября", "10" => "октября", "11" => "ноября", "12" => "декабря");
$my_mons2 = array("01" => "Январь", "02" => "Февраль", "03" => "Март", "04" => "Апрель", "05" => "Май", "06" => "Июнь", "07" => "Июль", "08" => "Август", "09" => "Сентябрь", "10" => "Октябрь", "11" => "Ноябрь", "12" => "Декабрь");
$my_mons3 = array("1" => "Январь", "2" => "Февраль", "3" => "Март", "4" => "Апрель", "5" => "Май", "6" => "Июнь", "7" => "Июль", "8" => "Август", "9" => "Сентябрь", "10" => "Октябрь", "11" => "Ноябрь", "12" => "Декабрь");
$my_suffix2 = array(0 => "ов", 1 => "", 2 => "а", 3 => "а", 4 => "а", 5 => "ов", 6 => "ов", 7 => "ов", 8 => "ов", 9 => "ов");

//сообщение об ошибке базы данных
function puterror($message)
{

	echo("<p>$message</p>");
	echo "<p><b>Error: ".mysql_error()."</b></p>";
	exit();
}

//вырезает из url теги
function caturl($text)
{
	return strip_tags($text);
}

//фильтр из текста выбирает цифры
function filtr($text){
	if($text){
		preg_match("/(\d+)/i", $text, $matches1);
		if ($matches1[0])
			return $matches1[0];
		else return 0;
	}
	return intval($text);
}

function text_filtr($text){
	preg_match("/([а-яА-Я-_]+) \(([а-яА-Я-_]+)\)/", $text, $new_text);
	return $new_text;
}

function rus_text($text){
	preg_match("/([а-яА-Я-_*]+)/", $text, $new_text);
	return $new_text[0];
}

function pravo_adm(){
$redac = 0;
	$role_q = mysql_query("select * from groups where iduser=".$_COOKIE['id_us']."");
	while ($role_r = mysql_fetch_array($role_q))
	{
		$role = $role_r['name'];
		if ($role == 'admin')
		$redac++;
	}
	return $redac;
}

// функция обрезки даты для календаря:
function correctData($uncor_date, $cor_date){
		$dates_c = explode("-", $uncor_date);
		$year_ev = $dates_c[0];
		$mon_e = $dates_c[1];
		$day_e = $dates_c[2];
		if (strlen($mon_e) == 1) { $mon_ev = str_pad($mon_e, 2, "0", STR_PAD_LEFT); } else $mon_ev = $mon_e;
		if (strlen($day_e) == 1) { $day_ev = str_pad($day_e, 2, "0", STR_PAD_LEFT); } else $day_ev = $day_e;
		$cor_date= $year_ev."-".$mon_ev."-".$day_ev;
		return $cor_date;
}

// функция превращения даты из базы в человекопонятную
function natdata($data_b)
{
	$year_b = substr($data_b, 0, 4);
	$mon_b = substr($data_b, 5, 2);
	$d_b = substr($data_b, 8, 2);
	$time_b = substr($data_b, 11, 5);
	
	$my_mons = array("01" => "января", "02" => "февраля", "03" => "марта", "04" => "апреля", "05" => "мая", "06" => "июня", "07" => "июля", "08" => "августа", "09" => "сентября", "10" => "октября", "11" => "ноября", "12" => "декабря");
	foreach ($my_mons as $k_dec => $v_mon)
	{
		if ($mon_b == $k_dec)
		$month_b = $v_mon;
	}
	
	// обрезка чисел, у которых нули в начале:
	$day = str_split($d_b);
	$day_ = $day[0];
	if ($day_ == 0)
	{
		$day_b = $day[1];
	}
	else 
	$day_b = $d_b; 	
	
	$data_nat = $day_b."&nbsp;".$month_b."&nbsp;".$year_b."г.&nbsp;в&nbsp;".$time_b;

	return $data_nat;
}

function cleanallcookie()
{
	setcookie("current_user", "");
	setcookie("wrdp","");
	setcookie("id_us","");
}

function settime($user,$enter,$dbregname) // устанавливает время посещения
{

	$ath = mysql_db_query($dbregname,"SELECT UNIX_TIMESTAMP(time) from users where name = '$user'");
	if($ath)
	{
		$authr = mysql_fetch_array($ath);
		$temptime = (int)$authr['UNIX_TIMESTAMP(time)'];
		if((time() - $temptime)/60>20 || $enter)
		{
			$query_update = "update users set last_time='".date("Y-m-d H:i:s",$temptime)."'where name = '$user';";
			if (!mysql_db_query($dbregname,$query_update)) puterror("Ошибка при обновлении времени (lasttime) ...");
		}
		$query_update = "update users set time=NOW() where name = '$user';";
		if(!mysql_db_query($dbregname,$query_update)) puterror("Ошибка при обновлении времени (time) ...");
	} else puterror("Ошибка при обращении к таблице пользователей ...");

}

function nax()
{
	$ref=getenv("REQUEST_URI");
	if ($ref!='') $ref='?ref='.$ref;
	header('Location: /enterform/'.$ref);
	exit();
}

function not_found()
{
	header('Location: '.W_ABSPATH.'404/');
	exit();
}

function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100)
{
  if (!file_exists($src)) return false;

  $size = getimagesize($src);

  if ($size === false) return false;

  // Определяем исходный формат по MIME-информации, предоставленной
  // функцией getimagesize, и выбираем соответствующую формату
  // imagecreatefrom-функцию.
  $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  $icfunc = "imagecreatefrom" . $format;
  if (!function_exists($icfunc)) return false;

  $x_ratio = $width / $size[0];
  $y_ratio = $height / $size[1];

  $ratio       = min($x_ratio, $y_ratio);
  $use_x_ratio = ($x_ratio == $ratio);

  $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
  $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
  $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
  $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

  $isrc = $icfunc($src);
  $idest = imagecreatetruecolor($width, $height);

  imagefill($idest, 0, 0, $rgb);
  imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, 
    $new_width, $new_height, $size[0], $size[1]);

  imagejpeg($idest, $dest, $quality);

  imagedestroy($isrc);
  imagedestroy($idest);

  return true;

}

//**********************************************************************************************************************
function authorizCookie($log, $pass, $id_user, $mygroup) // Проверка авторизации, получение пользовательской группы и id
	{  
		$query_auth = mysql_query("select * from users where name = '$log' AND pass = '$pass'");
		
			$auth = mysql_fetch_array($query_auth);
			if ($auth['id'] && $auth['name'] && $auth['pass']) 
			{
				$id_user = $auth['id'];
				setcookie ("current_user", $log, time() + 3600*24*2);
				setcookie ("wrdp", $pass, time() + 3600*24*2);
				setcookie ("id_us", $id_user, time() + 3600*24*2);	
								
				$query_group = mysql_query("select * from groups where iduser = ".$auth['id']."");
				$name_gr = mysql_fetch_array($query_group);
				$mygroup = $name_gr['name'];
				setcookie ("cur_group", $mygroup, time() + 3600*24*2); 
			} 	
		// Задача данной функции занести в массив $_COOKIE id, группу, логин и пароль 
	}

//**********************************************************************************************************************
//**********************************************************************************************************************


function UserData($log) {  // Функция, запрашивающая данные пользователя
	$us_d_query = mysql_query("select * from users where name = '".$log."'");
	if (!$us_d_query) echo "не удалось выполнить запрос";
	$userdata = mysql_fetch_array($us_d_query);
	return $userdata;
}


function loginion($user,$wrdp,$mygroup,$dbregname)
{

  $user = htmlspecialchars(stripslashes($user));
  $pswrd = htmlspecialchars(stripslashes($wrdp));
  $query = "select * from users where name = '".$user."';";
  $ath = mysql_db_query($dbregname,$query);

  if($ath) {
	$auth = mysql_fetch_array($ath);
		if ($auth['pass']!= $pswrd) {
			return 0;
		} else {
		$query_group = "select * from groups where name = '".$mygroup."' AND iduser = '".$auth['id']."';";
		$ath_group = mysql_db_query($dbregname,$query_group);
			if ($ath_group) {
			$auth_group = mysql_fetch_array($ath_group);
				if ($auth_group['name']!=$mygroup) {
					return 0;
				} else {
					return $auth;
				}

			}
		}
  } else {puterror("Ошибка при обращении к базе данных ...");}
} 

// Функция генерации пароля
function generate_password($number)

  {

    $arr = array('a','b','c','d','e','f',

                 'g','h','i','j','k','l',

                 'm','n','o','p','r','s',

                 't','u','v','x','y','z',

                 'A','B','C','D','E','F',

                 'G','H','I','J','K','L',

                 'M','N','O','P','R','S',

                 'T','U','V','X','Y','Z',

                 '1','2','3','4','5','6',

                 '7','8','9','0');


    // Генерируем пароль

    $pass = "";

    for($i = 0; $i < $number; $i++)

    {

      // Вычисляем случайный индекс массива

      $index = rand(0, count($arr) - 1);

      $pass .= $arr[$index];

    }

    return $pass;

  }
 
 // **************   Функции обработки сообщений:
 
  function BD_UpdSettingsMessMinL($min_l, $link) {  	// обновление минимальной длины сообщений 
		$min_l_upd_query = mysql_query("UPDATE set_messages SET min_length =".$min_l." WHERE id=1", $link);
		if (!$min_l_upd_query) echo "Выполнить не удалось";
  }
  
   function BD_UpdSettingsMessMaxL($max_l, $link) {  	// обновление минимальной длины сообщений 
		$max_l_upd_query = mysql_query("UPDATE set_messages SET min_length =".$max_l." WHERE id=1", $link);
		if (!$max_l_upd_query) echo "Выполнить не удалось";
  }
  
  function BD_SetMessage() {}
  
  function BD_ReadMessage() {}
  
  function BD_DeleteMessage() {}
  
  /* function FindTableWithParametres_upd($var_param, $param_where, $param_set, $table) { 
  // $var_param - значение, которое надо поменять, $param_set - поле таблицы,которое надо поменять, массив записей, $table - массив таблиц
		$table = array(1 => "users", 2 => "nevterpej_users", 3 => "nevterpej_map", 4 => "groups", 5 => "set_messages", 6 => "user_messages", 7 => "vhod_user_mes", 8 => "ish_user_mes");
		$param_set = array("" => );
		
  }*/
  

  
//$my_groups = array("member" => "Пользователь", "admin" => "Администратор", "redactor" => "Редактор", "manager" => "Менеджер", "expert" => "Эксперт", "seo" => "SEO", "miss" => "Участник", "moder" => "Модератор", "guest" => "Гость");
$my_content = array(1 => "Новости", 2 => "Статьи");
//$my_mons = array("01" => "января", "02" => "февраля", "03" => "марта", "04" => "апреля", "05" => "мая", "06" => "июня", "07" => "июля", "08" => "августа", "09" => "сентября", "10" => "октября", "11" => "ноября", "12" => "декабря");
$my_mons2 = array("01" => "Январь", "02" => "Февраль", "03" => "Март", "04" => "Апрель", "05" => "Май", "06" => "Июнь", "07" => "Июль", "08" => "Август", "09" => "Сентябрь", "10" => "Октябрь", "11" => "Ноябрь", "12" => "Декабрь");
$my_mons3 = array("1" => "Январь", "2" => "Февраль", "3" => "Март", "4" => "Апрель", "5" => "Май", "6" => "Июнь", "7" => "Июль", "8" => "Август", "9" => "Сентябрь", "10" => "Октябрь", "11" => "Ноябрь", "12" => "Декабрь");
$my_suffix2 = array(0 => "ов", 1 => "", 2 => "а", 3 => "а", 4 => "а", 5 => "ов", 6 => "ов", 7 => "ов", 8 => "ов", 9 => "ов");

$my_groups = array("member" => "Пользователь", "admin" => "Администратор", "redactor" => "Редактор", "manager" => "Менеджер", "expert" => "Эксперт");
$my_types = array(1 => "Новости", 2 => "Аналитика", 3 => "Пресса", 4 => "Наука" );
$my_type = array(1 => "Предложение", 2 => "Спрос");
$my_board = array(1 => "Куплю", 2 => "Продам", 3 => "Другое");
$my_books = array(1 => "Менеджмент", 2 => "Маркетинг. Реклама. PR", 3 => "Финансы. Банки. Инвестиции", 4 => "Бухучет. Налоги. Торговля", 5 => "Экономика", 6 => "Предпринимательство", 7 => "Избранное");
$my_consult = array(1 => "Менеджмент", 2 => "Маркетинг. Реклама. PR", 3 => "Финансы. Банки. Инвестиции", 4 => "Бухучет. Налоги. Торговля", 5 => "Экономика", 6 => "Предпринимательство", 7 => "Право и бизнес");
$my_month = array("01" => "Января", "02" => "Февраля", "03" => "Марта", "04" => "Апреля", "05" => "Мая", "06" => "Июня", "07" => "Июля", "08" => "Августа", "09" => "Сентября", "10" => "Октября", "11" => "Ноября", "12" => "Декабря"); 
$my_weekDays = array('Воскресение','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота');
  
//////////////////////////////////////////////////////////////////////////////////////////////////////////////  

  
function execInBackground($cmd) {
    if (substr(php_uname(), 0, 7) == "Windows"){
        pclose(popen("start /B ". $cmd, "r")); 
    }
    else {
        exec($cmd . " > /dev/null &");  
    }
}
  
function sendToLongPollingChannel($cid, $data){ 
	$maxTries = 20;
	for ($tries=0; $tries < $maxTries; $tries++){
		$c = curl_init(W_PUBLISH.'?cid=' . $cid );
		curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($c, CURLOPT_POST, true);
		curl_setopt($c, CURLOPT_POSTFIELDS, $data);
		$r = curl_exec($c);
		$code = curl_getinfo($c,CURLINFO_HTTP_CODE);
		
			//$f = fopen("/home/prprof.ru/longPolling-publish-error.log", "a+");
			//fputs($f, "ID_channel => $cid, => code => $code, i => $tries, data => ".$data."\n\n");
			//fclose($f); 		
		
		if($code == 201){
			break;
			return true;
		}
		else {
			usleep(500000); // 0.5 sec
			if ($tries == $maxTries - 1){
				// значит сообщение не доставлено
				// юзера нет онлайн( закрыта страница, нет long polling соединения)
				// пишем в user_events
				return false;
			}
		}
	}
}

/**
 * Функция проверяет существовнаие папки
 *
 * @param path $firstPart - первая часть пути, заведомо существующая ( со слэшем на конце )
 * @param array $arrCheck - массив с составляющими пути для проверки и создания
 */
function checkFolder($firstPart, $arrCheck){
	if (is_dir($firstPart)){
		$path = $firstPart;
		// если последний символ это слэш
		if (!strpbrk(substr(trim($path), -1, 1), "/"))
			$path .= "/";		
		foreach ($arrCheck as $dir){ 
			$path .= $dir."/";
			if (!is_dir($path))
				mkdir($path, 0755);
		}
	}
	return false;
	
	
}

function BBCode2Html($text) {
	$text = trim($text);

	// BBCode [code]
	if (!function_exists('escape')) {
		function escape($s) {
			global $text;
			$text = strip_tags($text);
			$code = $s[1];
			$code = htmlspecialchars($code);
			$code = str_replace("[", "&#91;", $code);
			$code = str_replace("]", "&#93;", $code);
			return '<pre><code>'.$code.'</code></pre>';
		}
	}
	$text = preg_replace_callback('/\[code\](.*?)\[\/code\]/ms', "escape", $text);

	// Smileys to find...
/*	$in = array( 	 ':)', 	
					 ':D',
					 ':o',
					 ':p',
					 ':(',
					 ';)'
	);
	// And replace them by...
	$out = array(	 '<img alt=":)" src="'.EMOTICONS_DIR.'emoticon-happy.png" />',
					 '<img alt=":D" src="'.EMOTICONS_DIR.'emoticon-smile.png" />',
					 '<img alt=":o" src="'.EMOTICONS_DIR.'emoticon-surprised.png" />',
					 '<img alt=":p" src="'.EMOTICONS_DIR.'emoticon-tongue.png" />',
					 '<img alt=":(" src="'.EMOTICONS_DIR.'emoticon-unhappy.png" />',
					 '<img alt=";)" src="'.EMOTICONS_DIR.'emoticon-wink.png" />'
	);
	$text = str_replace($in, $out, $text);*/
	
	// BBCode to find...
	$in = array( 	 '/\[b\](.*?)\[\/b\]/ms',	
					 '/\[i\](.*?)\[\/i\]/ms',
					 '/\[u\](.*?)\[\/u\]/ms',
					 '/\[img src\="?(.*?)"? width\="?(.*?)"? height\="?(.*?)"?\](.*?)\[\/img\]/ms',
					 '/\[video poster\="?(.*?)"? src\="?(.*?)"?\]\[\/video\]/ms',
					 '/\[email\](.*?)\[\/email\]/ms',
					 '/\[url\="?(.*?)"?\](.*?)\[\/url\]/ms',
					 '/\[size\="?(.*?)"?\](.*?)\[\/size\]/ms',
					 '/\[color\="?(.*?)"?\](.*?)\[\/color\]/ms',
					 '/\[quote](.*?)\[\/quote\]/ms',
					 '/\[list\=(.*?)\](.*?)\[\/list\]/ms',
					 '/\[list\](.*?)\[\/list\]/ms',
					 '/\[\*\]\s?(.*?)\n/ms'
	);
	// And replace them by...
	$out = array(	 '<strong>\1</strong>',
					 '<em>\1</em>',
					 '<u>\1</u>',
					 '<img src="\1" width="\2" height="\3" alt="\4" />',
					 '<video class="video-js vjs-default-skin" controls="controls" preload="none" width="475" poster="\1">
					 	<source type="video/mp4" src="\2.mp4" />
						<source type="video/ogg" src="\2.ogv" />
					 </video>',
					 '<a href="mailto:\1">\1</a>',
					 '<a href="\1">\2</a>',
					 '<span style="font-size:\1%">\2</span>',
					 '<span style="color:\1">\2</span>',
					 '<blockquote>\1</blockquote>',
					 '<ol start="\1">\2</ol>',
					 '<ul>\1</ul>',
					 '<li>\1</li>'
	);

	$text = preg_replace($in, $out, $text);
	
		
	// paragraphs
	$text = str_replace("\r", "", $text);
	$text = "<p>".preg_replace("/(\n){2,}/", "</p><p>", $text)."</p>";
	$text = nl2br($text); // new line to break
	
	
	// clean some tags to remain strict
	// not very elegant, but it works. No time to do better ;)
	if (!function_exists('removeBr')) {
		function removeBr($s) {
			return str_replace("<br />", "", $s[0]);
		}
	}	
	$text = preg_replace_callback('/<pre>(.*?)<\/pre>/ms', "removeBr", $text);
	$text = preg_replace('/<p><pre>(.*?)<\/pre><\/p>/ms', "<pre>\\1</pre>", $text);
	
	$text = preg_replace_callback('/<ul>(.*?)<\/ul>/ms', "removeBr", $text);
	$text = preg_replace('/<p><ul>(.*?)<\/ul><\/p>/ms', "<ul>\\1</ul>", $text);
	
	return $text;
}


if (!function_exists('pgettext')) {
      
      function pgettext($context, $msgid)
      {
         $contextString = "{$context}\004{$msgid}";
         $translation = dcgettext('messages', $contextString, LC_MESSAGES);
         if ($translation == $contextString)  return $msgid;
         else  return $translation;
      }
      
   }
//onClick="getBCtypes('.($pageNumber-1).'); return false;
   
      function getPages($link, $numberOfPages, $pageNumber = 1, $jsCode ='', $anchor = NULL, $afterLink = '', $linksCount = 6){
		$linksCount = ceil($linksCount / 2);
		$anchor = isset($anchor) ? '#' . $anchor : NULL;
		global $icoAltPrevPage, $icoAltNextPage;
		
		if ($numberOfPages>1){ 
			echo '<div class="paging">';
			if ($pageNumber>1)
				echo '<span class="bn_links left pred">&larr; <a href="#"  onClick="'.$link.'('.($pageNumber-1).'); return false;" >Предыдущая</a></span>';
			else echo '<span class="bn_links left pred">&larr; Предыдущая</span>';
			if ($pageNumber<$numberOfPages)
				echo '<span class="bn_links right"><a href="#" onClick="'.$link.'('.($pageNumber + 1).'); return false;">Следующая</a> &rarr;</span>';
			else echo '<span class="bn_links right">Следующая &rarr;</span>';	
				
			echo '<ul class="paging_u" id="paging_u">';
			
			// первая страница
			if ($pageNumber > 1+$linksCount){
				
				echo '<li><a href="#" onClick="'.$link.'(1); return false;" class="pg_btn">1 </a></li>';
				
				echo '<li><a href="javascript: void(0)">...</a></li>';		
			}
			
			// 6 ссылок до до текущей страницы
			for ($i=$pageNumber-$linksCount; $i<$pageNumber; $i++){
				if ($i>0)
					echo '<li><a href="#" onClick="'.$link.'('.$i.'); return false;" class="pg_btn">'.$i.' </a></li>';
			}
			
			// текущая страница
			echo '<li><a href="#" onClick="'.$link.'('.$i.'); return false;" class="pg_btn_selected">'.$pageNumber.' </a></li>';
			
			// 6 ссылок после текущей страницы
			for ($i=$pageNumber+1; $i<=$pageNumber+$linksCount; $i++){
				if ($i<=$numberOfPages)
					echo '<li><a href="#" onClick="'.$link.'('.$i.'); return false;" class="pg_btn">'.$i.' </a></li>';
			}
			
			// последняя страница
			if ($numberOfPages > $pageNumber+$linksCount){
			
				echo '<li><a href="javascript: void(0)">...</a></li>';
				
				echo '<li><a href="#" onClick="'.$link.'('.$numberOfPages.'); return false;" class="pg_btn">'.$numberOfPages.' </a></li>'; 
				
			}
			
			echo '</ul>';
			echo '<div class="clear"></div><!-- .clear-->';
			echo '</div><!-- .paging -->';
		}
	}
 
        
function translitIt($str) {
    $tr = array(
        "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
        "Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",
        "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
        "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
        "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
        "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"",
        "Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
        "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
        "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
        "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
        "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
        "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
        "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
    );
    return strtr($str,$tr);
}

/*
 * 
 * 
 */
?>